'/
' mathutil - version 1.033
' Written 2010 by Anton Berlin.
' 
' =========================================================================
' 
' This program is free software; you can redistribute it and/or modify
' it under the terms of the GNU Lesser General Public License as published
' by the Free Software Foundation; either version 3 of the License.
' 
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
' GNU General Public License for more details.
' 
' You should have received a copy of the GNU Lesser General Public License
' along with this program; if not, write to the Free Software
' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
'/

superstrict

import BRL.Reflection
import "Vector2.bmx"
import "Rectangle.bmx"
import "Point.bmx"

type mathutil

	'// -----------------------------------------------------------------------------------------------------------------
	'// Description:
	'// 		
	'// -----------------------------------------------------------------------------------------------------------------
	function clampi:int(value:int, minValue:int, maxValue:int)
	
		return min(max(value, minValue), maxValue);
	
	end function
	
	'// -----------------------------------------------------------------------------------------------------------------
	'// Description:
	'// 		
	'// -----------------------------------------------------------------------------------------------------------------
	function clampl:long(value:long, minValue:long, maxValue:long)
	
		return min(max(value, minValue), maxValue);
	
	end function
	
	'// -----------------------------------------------------------------------------------------------------------------
	'// Description:
	'// 		
	'// -----------------------------------------------------------------------------------------------------------------
	function clampf:float(value:float, minValue:float, maxValue:float)
	
		return min(max(value, minValue), maxValue);
	
	end function
	
	'// -----------------------------------------------------------------------------------------------------------------
	'// Description:
	'// 		
	'// -----------------------------------------------------------------------------------------------------------------
	function clampd:double(value:double, minValue:double, maxValue:double)
	
		return min(max(value, minValue), maxValue);
	
	end function
	
	'// -----------------------------------------------------------------------------------------------------------------
	'// Description:
	'// 		Prevent this type to be instantiated.
	'// -----------------------------------------------------------------------------------------------------------------
	method new()
	
		local id:string = TTypeId.forObject(self).Name();
		runtimeError("Illegal to create an instance of a namespace class '" + id + "'.");
	
	end method
	
	'// -----------------------------------------------------------------------------------------------------------------
	'// Description:
	'// 		
	'// -----------------------------------------------------------------------------------------------------------------
	global PiOver4:double = pi / 4.0;
	
	'// -----------------------------------------------------------------------------------------------------------------
	'// Description:
	'// 		
	'// -----------------------------------------------------------------------------------------------------------------
	global PiOver3:double = pi / 3.0;
	
	'// -----------------------------------------------------------------------------------------------------------------
	'// Description:
	'// 		
	'// -----------------------------------------------------------------------------------------------------------------
	global PiOver2:double = pi / 2.0;

end type
